package 第二章数据类型;

/*
	关于Java中的整数型
		byte
		short
		int
		long
 */
public class DataType05 {
    public static void main(String[] args) {

        //强制类型转换


        //x是long类型,100L也是long类型,不存在类型转换
        long x = 100L;
        //int y=x; 编译报错

        //大容量转换成小容量,需要进行强制类型转换
        //强制类型转换需要加上“强制类型转换符”
        //加上强制类型转换符之后编译通过,但是运行阶段会损失精度
        //强制转换类型要谨慎使用,可能损失精度很严重

        //强制转换原理
        //原始数据 100 :  00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100  	(long类型占8位)
        //转换后的结果:    00000000 00000000 00000000 00000000 01100100								(int类型占4位)
        //将二进制的高位截断,

        int y = (int) x;
        System.out.println(y);

        //强制转换误差演示
        //原始数据   			00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 00000000
        //强制转换后的数据 	10000000 00000000 00000000 00000000 00000000      (这是补码,需要求原码  原码->补码 符号位不变,取反加一,补码->原码,符号位不变,取反加一)
        //输出结果           -2147483648
        long z = 2147483648L;
        int a = (int) z;
        System.out.println(a);

        //字面值没有超过byte/short/char类型的取值范围,无需添加强制转换符
        //
        byte b = 50;
        byte b1 = 127;
        System.out.println(b);
        System.out.println(b1);


        //超出后编译报错
        //byte b2=128;
        //可以添加强制类型转换符
        byte b2 = (byte) 128;
        System.out.println(b2);
        short b3 = 32767;
        System.out.println(b3);
        char b4 = 65535;
        System.out.println(b4);
    }
}